實作完 upcaster 在建立 EventStore時,加入with_upcasters
的方式傳入即可使用:
let book_event_upcaster = BookEventUpcaster::default();
let book_store: PersistedEventStore<SurrealEventRepository, Book>
= PersistedEventStore::new_event_store(repo.clone())
.with_upcasters(vec![Box::new(book_event_upcaster)]);
遇到一個困難,因為使用in-memory db,程式一關掉就洗掉了。因為現在執行的程式已經是更版,無法利用現有的程式新增舊事件,所以需要再另外造一個舊結構體來存入資料庫:
#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
pub enum OldBookEvent {
BookCreated {
id: String,
title: String,
isbn10: String,
description: String,
},
}
寫一個function以便未來如果要添加更多事件:
pub fn old_serialized_events() -> Vec<SerializedEvent> {
vec![
SerializedEvent {
aggregate_id: "test-book-1".to_string(),
sequence: 1,
aggregate_type: "Book".to_string(),
event_type: "BookEvent".to_string(),
event_version: "0.1.0".to_string(),
payload: serde_json::to_value(OldBookEvent::BookCreated {
id: "test-book-1".to_string(),
title: "Rust 語言開發實戰".to_string(),
isbn10: "1234567890".to_string(),
description: "使用rust,併同cqrs框架,實現event sourcing".to_string(),
}).unwrap(),
metadata: serde_json::to_value(HashMap::<String, String>::new()).unwrap(),
},
]
}
做好舊格式的事件資料的準備,之後再來測試是否可以作用